A partir dos dados disponibilizados … é possivel aplicar diferentes abordagens nesses dados…
Problema para prever o salário de um cientista de dados
Y = salário de um cientista de dados
# read dataset
dataset <- read_csv("datahackers-survey-2019-anonymous-responses.csv")
# fix colnames
dataset <-
dataset %>%
janitor::clean_names()
# quantidade de opcoes por pergunta (ordenado do maior para o menor)
(
MORE_QUESTIONS <-
dataset %>%
colnames() %>%
str_extract("(p|d)[0-9]{1,}") %>%
table() %>%
.[.>1] %>%
sort(decreasing = T)
)
## .
## p26 p20 p27 p21 p28 p33 p30 p34 p23 p24 p25 p31 p35
## 24 21 16 13 12 11 10 10 7 7 7 6 2
# Perguntas com mais de 1 resposta:
names(MORE_QUESTIONS)
## [1] "p26" "p20" "p27" "p21" "p28" "p33" "p30" "p34" "p23" "p24" "p25" "p31"
## [13] "p35"
MORE_QUESTIONS <- MORE_QUESTIONS[names(MORE_QUESTIONS) != "p35"]
# Quantidade de respostas ordenada
dataset %>%
select(str_which(colnames(dataset), paste0(names(MORE_QUESTIONS), collapse = "|"))) %>%
map_df(sum) %>%
gather() %>%
arrange(-value) %>%
separate(key, c("pergunta", "resposta"), "_", extra = "merge")
## # A tibble: 144 x 3
## pergunta resposta value
## <chr> <chr> <dbl>
## 1 p31 data_hackers_blog 1195
## 2 p34 udemy 1125
## 3 p31 data_hackers_podcast 1096
## 4 p33 youtube_channels 1014
## 5 p31 weekly_newsletter 878
## 6 p23 sql 834
## 7 p21 python 784
## 8 p33 abroad_blogs 780
## 9 p33 meetups_and_events 762
## 10 p23 sheets 758
## # … with 134 more rows
Pode ser conferida em: https://www.kaggle.com/datahackers/pesquisa-data-hackers-2019
Perguntas realizadas e pré-seleção de atributos para previsão de salário:
| Indice | Pergunda | Seleção |
|---|---|---|
| P1 | Idade? [Mascarada] | ✗ |
| P2 | Gênero? [Mascarada] | ✗ |
| P3 | Atualmente você vive no Brasil? | ✗ |
| P4 | Em que país você vive hoje? | ✗ |
| P5 | Em que estado você vive hoje? [Mascarada] | ✗ |
| P6 | Na questão anterior você disse que vive em. Esse é seu estado de origem (onde nasceu ou se formou)? | ✗ |
| P7 | Qual seu estado de origem? | ✗ |
| P8 | Qual seu nível de ensino? | ✔ |
| P9 | Qual sua área de formação? | ✔ |
| P10 | Qual sua situação atual de trabalho? | ✗ |
| P11 | A empresa em que você trabalha pertence a qual setor? | ✔ |
| P12 | A empresa em que você trabalha possui quantos funcionários atualmente? | ✔ |
| P13 | Você atua como gestor? | ✔ |
| P14 | Qual das opções abaixo definem melhor seu cargo de trabalho atual como gestor? | ✔ |
| P15 | Qual das opções abaixo definem melhor seu cargo de trabalho atual? | ✔ |
| P16 | Qual sua faixa salarial atual? [Mascarada] | ✔ |
| P17 | Quanto tempo de experiência na área de dados você tem? | ✔ |
| P18 | Quanto tempo de experiência na área de TI/Engenharia de Software você teve antes de começar a trabalhar na área de dados? | ✔ |
| P19 | Você se considera um profissional que atua na área de Data Science? | ✔ |
| P20 | Quais dos métodos listados abaixo você costuma utilizar no trabalho? | ✔ |
| P21 | Quais das linguagens de programação listadas abaixo você utiliza no trabalho? | ✔ |
| P22 | Entre as linguagens de programação listadas abaixo, qual é a que você mais utiliza no trabalho? [Mascarada] | ✔ |
| P23 | Quais das fontes de dados listadas você já analisou no trabalho? | ✔ |
| P24 | Entre as fontes de dados listadas, quais você utiliza na maior parte do tempo? Selecione no máximo duas opções que você mais utiliza. | ✔ |
| P25 | Quais das opções de Cloud listadas abaixo você utiliza no trabalho? | ✔ |
| P26 | Quais dos bancos de dados/fontes de dados listados abaixo você utiliza para consultar informações, e posteriormente analisar, no trabalho? | ✔ |
| P27 | Quais as Ferramentas de Business Intelligence você utiliza no trabalho? | ✔ |
| P28 | Quais as tecnologias são utilizadas como ferramenta de ETL no seu trabalho? | ✔ |
| P29 | Sua organização possui um Data Warehouse? | ✔ |
| P30 | Qual tecnologia utilizada como plataforma do Data Warehouse? | ✔ |
| P31 | Quais das iniciativas do Data Hackers que você já acessou/acompanhou? | ✗ |
| P32 | Entre as iniciativas do Data Hackers qual a sua preferida? | ✗ |
| P33 | De quais outras formas que você costuma se atualizar no mundo dos dados? | ✔ |
| P34 | Em quais dessas plataformas listadas abaixo você já iniciou/completou cursos na área de Data Science? | ✔ |
| P35 | Dentre as plataformas listadas abaixo qual foi a sua preferida para cursos de Data Science? | ✗ |
Além dessas, derivamos algumas outras colunas:
| Indice | Pergunda | Seleção |
|---|---|---|
| D1 | Macrorregião em que mora | ✗ |
| D2 | Macrorregião em que nasceu | ✗ |
| D3 | Área de formação anonimizada | ✔ |
| D4 | Setor de mercado anonimizado | ✔ |
| D5 | Nível de gerência anonimizado | ✔ |
| D6 | Cargo anonimizado | ✔ |
Filtros:
# Conferir quem sao os individuos que nao declararam o salario:
dataset %>%
count(p10_job_situation, p16_salary_range) %>%
filter(is.na(p16_salary_range))
## # A tibble: 5 x 3
## p10_job_situation p16_salary_range n
## <chr> <chr> <int>
## 1 Desempregado e não estou buscando recolocação <NA> 3
## 2 Desempregado, buscando recolocação <NA> 69
## 3 Somente Estudante (graduação) <NA> 85
## 4 Somente Estudante (pós-graduação) <NA> 36
## 5 Trabalho na área Acadêmica/Pesquisador <NA> 45
# remover estes individuos do dataset:
dataset <-
dataset %>%
filter(p3_living_in_brasil == 1) %>%
filter(!is.na(p16_salary_range))
# Converter para fator ordenado
dataset <-
dataset %>%
mutate(p16_salary_range = factor(p16_salary_range,
levels = c("Menos de R$ 1.000/mês",
"de R$ 1.001/mês a R$ 2.000/mês",
"de R$ 2.001/mês a R$ 3000/mês",
"de R$ 3.001/mês a R$ 4.000/mês",
"de R$ 4.001/mês a R$ 6.000/mês",
"de R$ 6.001/mês a R$ 8.000/mês",
"de R$ 8.001/mês a R$ 12.000/mês",
"de R$ 12.001/mês a R$ 16.000/mês",
"de R$ 16.001/mês a R$ 20.000/mês",
"de R$ 20.001/mês a R$ 25.000/mês",
"Acima de R$ 25.001/mês")))
# before fix y
p1 <-
plotly::ggplotly(
dataset %>%
count(p16_salary_range) %>%
ggplot(aes(x= p16_salary_range, y = n))+
geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust = 1))
)
# Agregar salarios com menor frequencia
dataset <-
dataset %>%
mutate(p16_salary_range = as.character(p16_salary_range),
p16_salary_range =
case_when(
p16_salary_range == "Menos de R$ 1.000/mês" ~ "Menos de R$ 2.000/mês",
p16_salary_range == "de R$ 1.001/mês a R$ 2.000/mês" ~ "Menos de R$ 2.000/mês",
p16_salary_range == "de R$ 2.001/mês a R$ 3000/mês" ~ "de R$ 2.001/mês a R$ 3.000/mês",
p16_salary_range == "de R$ 12.001/mês a R$ 16.000/mês" ~ "Acima de R$ 12.001/mês",
p16_salary_range == "de R$ 16.001/mês a R$ 20.000/mês" ~ "Acima de R$ 12.001/mês",
p16_salary_range == "de R$ 20.001/mês a R$ 25.000/mês" ~ "Acima de R$ 12.001/mês",
p16_salary_range == "Acima de R$ 25.001/mês" ~ "Acima de R$ 12.001/mês",
TRUE ~ as.character(p16_salary_range)),
p16_salary_range =
factor(p16_salary_range,
levels = c("Menos de R$ 2.000/mês",
"de R$ 2.001/mês a R$ 3.000/mês",
"de R$ 3.001/mês a R$ 4.000/mês",
"de R$ 4.001/mês a R$ 6.000/mês",
"de R$ 6.001/mês a R$ 8.000/mês",
"de R$ 8.001/mês a R$ 12.000/mês",
"Acima de R$ 12.001/mês")))
# after fix y
p2 <-
plotly::ggplotly(
dataset %>%
count(p16_salary_range) %>%
ggplot(aes(x= p16_salary_range, y = n))+
geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust = 1))
)
plotly::subplot(p1, p2)
# create_report(dataset, y = "p16_salary_range")
introduce(dataset) %>% gather()
## # A tibble: 9 x 2
## key value
## <chr> <dbl>
## 1 rows 1506
## 2 columns 170
## 3 discrete_columns 19
## 4 continuous_columns 151
## 5 all_missing_columns 0
## 6 total_missing_values 6277
## 7 complete_rows 0
## 8 total_observations 256020
## 9 memory_usage 2238584
plot_intro(dataset)
plot_missing(dataset, missing_only = T)
visdat::vis_dat(dataset)
dataset %>%
map_dbl(~sum(is.na(.x))) %>%
.[.!=0] %>%
{tibble(pergunta = names(.), n = .)} %>%
arrange(-n)
## # A tibble: 13 x 2
## pergunta n
## <chr> <dbl>
## 1 p35_other 1385
## 2 d2_origin_macroregion 1220
## 3 d5_anonymized_manager_level 1205
## 4 p29_have_data_warehouse 815
## 5 p22_most_used_proggraming_languages 732
## 6 d6_anonymized_role 272
## 7 p5_living_state 234
## 8 d1_living_macroregion 234
## 9 p35_data_science_plataforms_preference 121
## 10 d3_anonymized_degree_area 32
## 11 p1_age 21
## 12 d4_anonymized_market_sector 4
## 13 p36_draw_participation 2
histogramas, densidades, boxplots, dispersao, matrix de correlacoes
Formato, Limpeza, Amostragem
Normalidade, igualdades, etc
Scale, decomposicao, agregacao
Por nivel de dificuldade (do mais facil para o mais dificil):
baseline
metricas, proporcao de dados (palavras) utilizadas, tempo de processamento, tempo de estimacao etc
grid search
modelo hibrido?
bagging, boosting, blending
“extreme feature engineering”
Contexto Problema Solucao Achados Limitacoes Conclusoes
Shiny?